home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Resources / Chat & Communication / Digsby build 37 / digsby_setup.exe / lib / htmllib.pyo (.txt) < prev    next >
Python Compiled Bytecode  |  2008-10-13  |  16KB  |  568 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.5)
  3.  
  4. import sgmllib
  5. from formatter import AS_IS
  6. __all__ = [
  7.     'HTMLParser',
  8.     'HTMLParseError']
  9.  
  10. class HTMLParseError(sgmllib.SGMLParseError):
  11.     pass
  12.  
  13.  
  14. class HTMLParser(sgmllib.SGMLParser):
  15.     from htmlentitydefs import entitydefs
  16.     
  17.     def __init__(self, formatter, verbose = 0):
  18.         sgmllib.SGMLParser.__init__(self, verbose)
  19.         self.formatter = formatter
  20.  
  21.     
  22.     def error(self, message):
  23.         raise HTMLParseError(message)
  24.  
  25.     
  26.     def reset(self):
  27.         sgmllib.SGMLParser.reset(self)
  28.         self.savedata = None
  29.         self.isindex = 0
  30.         self.title = None
  31.         self.base = None
  32.         self.anchor = None
  33.         self.anchorlist = []
  34.         self.nofill = 0
  35.         self.list_stack = []
  36.  
  37.     
  38.     def handle_data(self, data):
  39.         if self.savedata is not None:
  40.             self.savedata = self.savedata + data
  41.         elif self.nofill:
  42.             self.formatter.add_literal_data(data)
  43.         else:
  44.             self.formatter.add_flowing_data(data)
  45.  
  46.     
  47.     def save_bgn(self):
  48.         self.savedata = ''
  49.  
  50.     
  51.     def save_end(self):
  52.         data = self.savedata
  53.         self.savedata = None
  54.         if not self.nofill:
  55.             data = ' '.join(data.split())
  56.         
  57.         return data
  58.  
  59.     
  60.     def anchor_bgn(self, href, name, type):
  61.         self.anchor = href
  62.         if self.anchor:
  63.             self.anchorlist.append(href)
  64.         
  65.  
  66.     
  67.     def anchor_end(self):
  68.         if self.anchor:
  69.             self.handle_data('[%d]' % len(self.anchorlist))
  70.             self.anchor = None
  71.         
  72.  
  73.     
  74.     def handle_image(self, src, alt, *args):
  75.         self.handle_data(alt)
  76.  
  77.     
  78.     def start_html(self, attrs):
  79.         pass
  80.  
  81.     
  82.     def end_html(self):
  83.         pass
  84.  
  85.     
  86.     def start_head(self, attrs):
  87.         pass
  88.  
  89.     
  90.     def end_head(self):
  91.         pass
  92.  
  93.     
  94.     def start_body(self, attrs):
  95.         pass
  96.  
  97.     
  98.     def end_body(self):
  99.         pass
  100.  
  101.     
  102.     def start_title(self, attrs):
  103.         self.save_bgn()
  104.  
  105.     
  106.     def end_title(self):
  107.         self.title = self.save_end()
  108.  
  109.     
  110.     def do_base(self, attrs):
  111.         for a, v in attrs:
  112.             if a == 'href':
  113.                 self.base = v
  114.                 continue
  115.         
  116.  
  117.     
  118.     def do_isindex(self, attrs):
  119.         self.isindex = 1
  120.  
  121.     
  122.     def do_link(self, attrs):
  123.         pass
  124.  
  125.     
  126.     def do_meta(self, attrs):
  127.         pass
  128.  
  129.     
  130.     def do_nextid(self, attrs):
  131.         pass
  132.  
  133.     
  134.     def start_h1(self, attrs):
  135.         self.formatter.end_paragraph(1)
  136.         self.formatter.push_font(('h1', 0, 1, 0))
  137.  
  138.     
  139.     def end_h1(self):
  140.         self.formatter.end_paragraph(1)
  141.         self.formatter.pop_font()
  142.  
  143.     
  144.     def start_h2(self, attrs):
  145.         self.formatter.end_paragraph(1)
  146.         self.formatter.push_font(('h2', 0, 1, 0))
  147.  
  148.     
  149.     def end_h2(self):
  150.         self.formatter.end_paragraph(1)
  151.         self.formatter.pop_font()
  152.  
  153.     
  154.     def start_h3(self, attrs):
  155.         self.formatter.end_paragraph(1)
  156.         self.formatter.push_font(('h3', 0, 1, 0))
  157.  
  158.     
  159.     def end_h3(self):
  160.         self.formatter.end_paragraph(1)
  161.         self.formatter.pop_font()
  162.  
  163.     
  164.     def start_h4(self, attrs):
  165.         self.formatter.end_paragraph(1)
  166.         self.formatter.push_font(('h4', 0, 1, 0))
  167.  
  168.     
  169.     def end_h4(self):
  170.         self.formatter.end_paragraph(1)
  171.         self.formatter.pop_font()
  172.  
  173.     
  174.     def start_h5(self, attrs):
  175.         self.formatter.end_paragraph(1)
  176.         self.formatter.push_font(('h5', 0, 1, 0))
  177.  
  178.     
  179.     def end_h5(self):
  180.         self.formatter.end_paragraph(1)
  181.         self.formatter.pop_font()
  182.  
  183.     
  184.     def start_h6(self, attrs):
  185.         self.formatter.end_paragraph(1)
  186.         self.formatter.push_font(('h6', 0, 1, 0))
  187.  
  188.     
  189.     def end_h6(self):
  190.         self.formatter.end_paragraph(1)
  191.         self.formatter.pop_font()
  192.  
  193.     
  194.     def do_p(self, attrs):
  195.         self.formatter.end_paragraph(1)
  196.  
  197.     
  198.     def start_pre(self, attrs):
  199.         self.formatter.end_paragraph(1)
  200.         self.formatter.push_font((AS_IS, AS_IS, AS_IS, 1))
  201.         self.nofill = self.nofill + 1
  202.  
  203.     
  204.     def end_pre(self):
  205.         self.formatter.end_paragraph(1)
  206.         self.formatter.pop_font()
  207.         self.nofill = max(0, self.nofill - 1)
  208.  
  209.     
  210.     def start_xmp(self, attrs):
  211.         self.start_pre(attrs)
  212.         self.setliteral('xmp')
  213.  
  214.     
  215.     def end_xmp(self):
  216.         self.end_pre()
  217.  
  218.     
  219.     def start_listing(self, attrs):
  220.         self.start_pre(attrs)
  221.         self.setliteral('listing')
  222.  
  223.     
  224.     def end_listing(self):
  225.         self.end_pre()
  226.  
  227.     
  228.     def start_address(self, attrs):
  229.         self.formatter.end_paragraph(0)
  230.         self.formatter.push_font((AS_IS, 1, AS_IS, AS_IS))
  231.  
  232.     
  233.     def end_address(self):
  234.         self.formatter.end_paragraph(0)
  235.         self.formatter.pop_font()
  236.  
  237.     
  238.     def start_blockquote(self, attrs):
  239.         self.formatter.end_paragraph(1)
  240.         self.formatter.push_margin('blockquote')
  241.  
  242.     
  243.     def end_blockquote(self):
  244.         self.formatter.end_paragraph(1)
  245.         self.formatter.pop_margin()
  246.  
  247.     
  248.     def start_ul(self, attrs):
  249.         self.formatter.end_paragraph(not (self.list_stack))
  250.         self.formatter.push_margin('ul')
  251.         self.list_stack.append([
  252.             'ul',
  253.             '*',
  254.             0])
  255.  
  256.     
  257.     def end_ul(self):
  258.         if self.list_stack:
  259.             del self.list_stack[-1]
  260.         
  261.         self.formatter.end_paragraph(not (self.list_stack))
  262.         self.formatter.pop_margin()
  263.  
  264.     
  265.     def do_li(self, attrs):
  266.         self.formatter.end_paragraph(0)
  267.         if self.list_stack:
  268.             (dummy, label, counter) = top = self.list_stack[-1]
  269.             top[2] = counter = counter + 1
  270.         else:
  271.             (label, counter) = ('*', 0)
  272.         self.formatter.add_label_data(label, counter)
  273.  
  274.     
  275.     def start_ol(self, attrs):
  276.         self.formatter.end_paragraph(not (self.list_stack))
  277.         self.formatter.push_margin('ol')
  278.         label = '1.'
  279.         for a, v in attrs:
  280.             if a == 'type':
  281.                 if len(v) == 1:
  282.                     v = v + '.'
  283.                 
  284.                 label = v
  285.                 continue
  286.         
  287.         self.list_stack.append([
  288.             'ol',
  289.             label,
  290.             0])
  291.  
  292.     
  293.     def end_ol(self):
  294.         if self.list_stack:
  295.             del self.list_stack[-1]
  296.         
  297.         self.formatter.end_paragraph(not (self.list_stack))
  298.         self.formatter.pop_margin()
  299.  
  300.     
  301.     def start_menu(self, attrs):
  302.         self.start_ul(attrs)
  303.  
  304.     
  305.     def end_menu(self):
  306.         self.end_ul()
  307.  
  308.     
  309.     def start_dir(self, attrs):
  310.         self.start_ul(attrs)
  311.  
  312.     
  313.     def end_dir(self):
  314.         self.end_ul()
  315.  
  316.     
  317.     def start_dl(self, attrs):
  318.         self.formatter.end_paragraph(1)
  319.         self.list_stack.append([
  320.             'dl',
  321.             '',
  322.             0])
  323.  
  324.     
  325.     def end_dl(self):
  326.         self.ddpop(1)
  327.         if self.list_stack:
  328.             del self.list_stack[-1]
  329.         
  330.  
  331.     
  332.     def do_dt(self, attrs):
  333.         self.ddpop()
  334.  
  335.     
  336.     def do_dd(self, attrs):
  337.         self.ddpop()
  338.         self.formatter.push_margin('dd')
  339.         self.list_stack.append([
  340.             'dd',
  341.             '',
  342.             0])
  343.  
  344.     
  345.     def ddpop(self, bl = 0):
  346.         self.formatter.end_paragraph(bl)
  347.         if self.list_stack:
  348.             if self.list_stack[-1][0] == 'dd':
  349.                 del self.list_stack[-1]
  350.                 self.formatter.pop_margin()
  351.             
  352.         
  353.  
  354.     
  355.     def start_cite(self, attrs):
  356.         self.start_i(attrs)
  357.  
  358.     
  359.     def end_cite(self):
  360.         self.end_i()
  361.  
  362.     
  363.     def start_code(self, attrs):
  364.         self.start_tt(attrs)
  365.  
  366.     
  367.     def end_code(self):
  368.         self.end_tt()
  369.  
  370.     
  371.     def start_em(self, attrs):
  372.         self.start_i(attrs)
  373.  
  374.     
  375.     def end_em(self):
  376.         self.end_i()
  377.  
  378.     
  379.     def start_kbd(self, attrs):
  380.         self.start_tt(attrs)
  381.  
  382.     
  383.     def end_kbd(self):
  384.         self.end_tt()
  385.  
  386.     
  387.     def start_samp(self, attrs):
  388.         self.start_tt(attrs)
  389.  
  390.     
  391.     def end_samp(self):
  392.         self.end_tt()
  393.  
  394.     
  395.     def start_strong(self, attrs):
  396.         self.start_b(attrs)
  397.  
  398.     
  399.     def end_strong(self):
  400.         self.end_b()
  401.  
  402.     
  403.     def start_var(self, attrs):
  404.         self.start_i(attrs)
  405.  
  406.     
  407.     def end_var(self):
  408.         self.end_i()
  409.  
  410.     
  411.     def start_i(self, attrs):
  412.         self.formatter.push_font((AS_IS, 1, AS_IS, AS_IS))
  413.  
  414.     
  415.     def end_i(self):
  416.         self.formatter.pop_font()
  417.  
  418.     
  419.     def start_b(self, attrs):
  420.         self.formatter.push_font((AS_IS, AS_IS, 1, AS_IS))
  421.  
  422.     
  423.     def end_b(self):
  424.         self.formatter.pop_font()
  425.  
  426.     
  427.     def start_tt(self, attrs):
  428.         self.formatter.push_font((AS_IS, AS_IS, AS_IS, 1))
  429.  
  430.     
  431.     def end_tt(self):
  432.         self.formatter.pop_font()
  433.  
  434.     
  435.     def start_a(self, attrs):
  436.         href = ''
  437.         name = ''
  438.         type = ''
  439.         for attrname, value in attrs:
  440.             value = value.strip()
  441.             if attrname == 'href':
  442.                 href = value
  443.             
  444.             if attrname == 'name':
  445.                 name = value
  446.             
  447.             if attrname == 'type':
  448.                 type = value.lower()
  449.                 continue
  450.         
  451.         self.anchor_bgn(href, name, type)
  452.  
  453.     
  454.     def end_a(self):
  455.         self.anchor_end()
  456.  
  457.     
  458.     def do_br(self, attrs):
  459.         self.formatter.add_line_break()
  460.  
  461.     
  462.     def do_hr(self, attrs):
  463.         self.formatter.add_hor_rule()
  464.  
  465.     
  466.     def do_img(self, attrs):
  467.         align = ''
  468.         alt = '(image)'
  469.         ismap = ''
  470.         src = ''
  471.         width = 0
  472.         height = 0
  473.         for attrname, value in attrs:
  474.             if attrname == 'align':
  475.                 align = value
  476.             
  477.             if attrname == 'alt':
  478.                 alt = value
  479.             
  480.             if attrname == 'ismap':
  481.                 ismap = value
  482.             
  483.             if attrname == 'src':
  484.                 src = value
  485.             
  486.             if attrname == 'width':
  487.                 
  488.                 try:
  489.                     width = int(value)
  490.                 except ValueError:
  491.                     pass
  492.                 except:
  493.                     None<EXCEPTION MATCH>ValueError
  494.                 
  495.  
  496.             None<EXCEPTION MATCH>ValueError
  497.             if attrname == 'height':
  498.                 
  499.                 try:
  500.                     height = int(value)
  501.                 except ValueError:
  502.                     pass
  503.                 except:
  504.                     None<EXCEPTION MATCH>ValueError
  505.                 
  506.  
  507.             None<EXCEPTION MATCH>ValueError
  508.         
  509.         self.handle_image(src, alt, ismap, align, width, height)
  510.  
  511.     
  512.     def do_plaintext(self, attrs):
  513.         self.start_pre(attrs)
  514.         self.setnomoretags()
  515.  
  516.     
  517.     def unknown_starttag(self, tag, attrs):
  518.         pass
  519.  
  520.     
  521.     def unknown_endtag(self, tag):
  522.         pass
  523.  
  524.  
  525.  
  526. def test(args = None):
  527.     import sys as sys
  528.     import formatter
  529.     if not args:
  530.         args = sys.argv[1:]
  531.     
  532.     if args:
  533.         pass
  534.     silent = args[0] == '-s'
  535.     if silent:
  536.         del args[0]
  537.     
  538.     if args:
  539.         file = args[0]
  540.     else:
  541.         file = 'test.html'
  542.     if file == '-':
  543.         f = sys.stdin
  544.     else:
  545.         
  546.         try:
  547.             f = open(file, 'r')
  548.         except IOError:
  549.             msg = None
  550.             print file, ':', msg
  551.             sys.exit(1)
  552.  
  553.     data = f.read()
  554.     if f is not sys.stdin:
  555.         f.close()
  556.     
  557.     if silent:
  558.         f = formatter.NullFormatter()
  559.     else:
  560.         f = formatter.AbstractFormatter(formatter.DumbWriter())
  561.     p = HTMLParser(f)
  562.     p.feed(data)
  563.     p.close()
  564.  
  565. if __name__ == '__main__':
  566.     test()
  567.  
  568.